[% setvar title Perl 6 FAQ %]
<div id="archive-notice">
    <h3>This file is part of the Perl 6 Archive</h3>
    <p>To see what is currently happening visit <a href="http://www.perl6.org/">http://www.perl6.org/</a></p>
</div>
<div class='pod'>
<a name='NAME'></a><h1>NAME</h1>
<p>Perl 6 FAQ</p>
<a name='GENERAL QUESTIONS'></a><h1>GENERAL QUESTIONS</h1>
<a name='Will I be able to convert my Perl 5 programs to Perl 6?'></a><h2>Will I be able to convert my Perl 5 programs to Perl 6?</h2>
<p>Yes. Larry Wall and others are already working on a Perl 5 to Perl 6
translator, which will be able to translate (most) Perl 5 source code to
the equivalent Perl 6 syntax.</p>
<p>In addition, Perl 6 will provide a &quot;Perl 5 compatibility mode&quot;, allowing
the compiler to directly execute any code that it recognizes as being
written in Perl 5.</p>
<a name='Is anyone going to bother to switch from Perl 5 to Perl 6?'></a><h2>Is anyone going to bother to switch from Perl 5 to Perl 6?</h2>
<p>Yes. Unlike Perl 5, Perl 6 will provide:</p>
<ul>
<li><a name='explicit strong typing'></a>explicit strong typing</li>
<li><a name='proper parameter lists'></a>proper parameter lists</li>
<li><a name='active metadata on values, variables, subroutines, and types'></a>active metadata on values, variables, subroutines, and types</li>
<li><a name='declarative classes with strong encapsulation'></a>declarative classes with strong encapsulation</li>
<li><a name='roles'></a>roles</li>
<li><a name='full OO exception handling'></a>full OO exception handling</li>
<li><a name='support for the concurrent use of multiple versions of a module'></a>support for the concurrent use of multiple versions of a module</li>
<li><a name='extensive introspection facilities (including of POD)'></a>extensive introspection facilities (including of POD)</li>
<li><a name='LL and LR grammars (including a built-in grammar for Perl 6 itself)'></a>LL and LR grammars (including a built-in grammar for Perl 6 itself)</li>
<li><a name='subroutine overloading'></a>subroutine overloading</li>
<li><a name='multiple dispatch'></a>multiple dispatch</li>
<li><a name='named arguments'></a>named arguments</li>
<li><a name='a built-in switch statement'></a>a built-in switch statement</li>
<li><a name='hierarchical construction and destruction'></a>hierarchical construction and destruction</li>
<li><a name='distributive method dispatch'></a>distributive method dispatch</li>
<li><a name='method delegation'></a>method delegation</li>
<li><a name='named regexes'></a>named regexes</li>
<li><a name='overlapping and exhaustive regex matches within a string'></a>overlapping and exhaustive regex matches within a string</li>
<li><a name='named captures'></a>named captures</li>
<li><a name='parse-tree pruning'></a>parse-tree pruning</li>
<li><a name='incremental regex matching against input streams'></a>incremental regex matching against input streams</li>
<li><a name='macros (that are implemented in Perl itself)'></a>macros (that are implemented in Perl itself)</li>
<li><a name='user-definable operators (from the full Unicode set)'></a>user-definable operators (from the full Unicode set)</li>
<li><a name='chained comparisons'></a>chained comparisons</li>
<li><a name='a universally accessible aliasing mechanism'></a>a universally accessible aliasing mechanism</li>
<li><a name='lexical exporting (via a cleaner, declarative syntax)'></a>lexical exporting (via a cleaner, declarative syntax)</li>
<li><a name='multimorphic equality tests'></a>multimorphic equality tests</li>
<li><a name='state variables'></a>state variables</li>
<li><a name='hypothetical variables'></a>hypothetical variables</li>
<li><a name='hyperoperators (i.e. vector processing)'></a>hyperoperators (i.e. vector processing)</li>
<li><a name='function currying'></a>function currying</li>
<li><a name='junctions (i.e. superpositional values, subroutines, and types)'></a>junctions (i.e. superpositional values, subroutines, and types)</li>
<li><a name='coroutines'></a>coroutines</li>
<li><a name='lazy lists'></a>lazy lists</li>
<li><a name='strong module and language versioning'></a>strong module and language versioning</li>
<li><a name='concurrent object pipes'></a>concurrent object pipes</li>
</ul>
<p>Developers who want to take advantage of those new and/or improved features
will switch to Perl 6.</p>
<a name='Perl 6 looks even more obfuscatory and line-noisy than Perl 5 is -- does Perl 6 make it likely that programmers will write code that is unreadable/unmaintainable by mere mortals?'></a><h2>Perl 6 looks even more obfuscatory and line-noisy than Perl 5 is
-- does Perl 6 make it likely that programmers will write code that is
unreadable/unmaintainable by mere mortals?</h2>
<p>Many of the features mentioned in the previous answer are specifically aimed
at making well-written Perl 6 code even more readable and maintainable than
well-written Perl 5 code.</p>
<p>As for line-noisy, Perl 6 will remove or mitigate many of the usual
suspects. For example, the majority of the punctuation variables are
gone, and the regex syntax has been considerably sanitized.
However, much of what Perl's detractors refer to as &quot;line-noise&quot;, we
prefer to call &quot;the actual syntax of the language&quot;. Complaining that
Perl is &quot;noisy&quot; is like complaining that English is &quot;wordy&quot;: all
those confusing pronouns and gerunds and prepositions and conjunctive
adverbs, etc. making it hard to read.</p>
<p>Perl's fundamental philosophy in that area isn't going to change, so
Perl 6 will still have a rich grammar in which distinct components are
specified using distinctive syntactic forms.</p>
<a name='Will people be able to develop in Perl 6 and release stand-alone executables, so as to protect their original code?'></a><h2>Will people be able to develop in Perl 6 and release stand-alone
executables, so as to protect their original code?</h2>
<p>Since Perl 6 is a language specification, the details will depend on the
specific compilers.</p>
<p>Rakudo, a Perl 6 compiler based on Parrot, allows compilation to bytecode, and
a small wrapper exists that can pack up a bytecode file and parrot into a
single executable.</p>
<a name='Is there a release date set for perl 6.0 ?'></a><h2>Is there a release date set for perl 6.0 ?</h2>
<p>In regards to Perl 6, the answer on release dates is really &quot;when it's
ready&quot;.  There is no major commercial sponsor for the language
development so the majority of the work is driven by volunteers
and donations from the Perl Foundation (<a href='http://www.perlfoundation.org/).' target='_blank'>www.perlfoundation.org</a></p>
<p>That said, there is a release date for Rakudo: In Q2 2010 Patrick Michaud will
release a useful and usable (but not feature complete) Perl 6 compiler, see
<a href='http://use.perl.org/~pmichaud/journal/39411.' target='_blank'>use.perl.org</a> Rakudo is mature enough that
you can play with it today, and provide valuable feedback to both the
implementers and the language designers.</p>
<p>For more information on the latest re: perl 6, check out:</p>
<ul>
<li><a name='planetsix.perl.org'></a><a href='http://planetsix.perl.org/' target='_blank'>planetsix.perl.org</a></li>
<li><a name='dev.perl.org'></a><a href='http://dev.perl.org/perl6/' target='_blank'>dev.perl.org</a></li>
<li><a name='www.pugscode.org'></a><a href='http://www.pugscode.org/' target='_blank'>www.pugscode.org</a></li>
<li><a name='www.parrot.org'></a><a href='http://www.parrot.org/' target='_blank'>www.parrot.org</a></li>
<li><a name='rakudo.org'></a><a href='http://rakudo.org/' target='_blank'>rakudo.org</a></li>
</ul>
<p>You may also wish to have a look at some of the <code>Perl6::*</code> modules.
which experiment with adding new language features to perl5.
See the current list on CPAN
(<a href='http://search.cpan.org/search?query=Perl6' target='_blank'>search.cpan.org</a>&amp;mode=module).</p>
<p>If you really want to see Perl 6 done faster, the best answer is ...
get involved!  Sign up for the mailing lists and consider contributing
some tests, documentation, or code to the Parrot or Pugs projects depending
on your level of experience (or even donate real dollars to the
Perl Foundation ;)</p>
</div>
